package main

import "fmt"

/*
1、string底层是一个byte数组，因此string也可以进行切片处理
2、string和切片在内存的形式，string也代表一个地址
3、string是不可变的，也就是说不能通过str[0]='z'方式来修改字符串
4、如果需要修改字符串，可以先将string->[]byte 或者 []rune -> 修改 -> 重写转成string
*/
/*
s1, s2 := []byte(s), []byte(t)
sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] })
sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] })
可以使用以上方法对切片快速进行排序
*/
func main() {
	//1
	str := "hello@atguigu"
	slice := str[6:]
	fmt.Println("slice=", slice)

	//3
	//str[0]='z'//编译不通过，报错，原因是string是不可变的

	//4
	arr1 := []byte(str)
	arr1[0] = 'z'
	str = string(arr1)
	fmt.Println("str=", str)

	//细节，我们转成[]byte后，可以处理英文和数字，但是不能处理中文
	//原因是[]byte字节来处理，而一个汉字，是3个字节，因此就会乱码
	//解决方法是将string转成[]rune即可，因为[]rune是按字符处理，兼容汉字
	arr2 := []rune(str)
	arr2[0] = '北'
	str = string(arr2)
	fmt.Println("str=", str)
}
